package com.liruo.learn.spring.mvc.enumconverter;

import org.springframework.core.convert.converter.Converter;

/**
 * @Author:liruo
 * @Date:2023-02-19-13:46:59
 * @Desc
 * 注意传参是class要对应Converter的第二个泛型，这个实在没办法用泛型规范
 * 必须指定什么类型由什么类型来转换 即不能泛型化--参数化
 */
public class ToEnumConverter<S, T extends SourceEnum<S>> implements Converter<S, T> {
    private final Class<T> enumClazz;

    public ToEnumConverter(Class<T> enumClazz) {
        this.enumClazz = enumClazz;
    }
    @Override
    public T convert(S source) {
        for (T enumeration : enumClazz.getEnumConstants()){
            if(enumeration.getSource().equals(source)){
                return enumeration;
            }
        }
        throw new IllegalArgumentException(
                "has not the enumeration source[class="
                        + ((source instanceof  String) ? String.class.getName() : Integer.class.getName())
                        + "] value=" + source);
    }

}
